package co.yixiang.api;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 自定义异常类，用于处理API中的异常情况
 * 该类继承自RuntimeException，实现了快速的异常处理和信息传递
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class YshopException extends RuntimeException{

    private static final long serialVersionUID = -2470461654663264392L;

    private Integer errorCode;
    private String message;

    /**
     * 默认构造函数
     */
    public YshopException() {
        super();
    }

    /**
     * 根据错误信息构造异常
     *
     * @param message 错误信息
     */
    public YshopException(String message) {
        super(message);
        this.message = message;
    }

    /**
     * 根据错误码和错误信息构造异常
     *
     * @param errorCode 错误码
     * @param message   错误信息
     */
    public YshopException(Integer errorCode, String message) {
        super(message);
        this.errorCode = errorCode;
        this.message = message;
    }

    /**
     * 根据ApiCode枚举构造异常
     *
     * @param apiCode ApiCode枚举，包含错误码和错误信息
     */
    public YshopException(ApiCode apiCode) {
        super(apiCode.getMessage());
        this.errorCode = apiCode.getCode();
        this.message = apiCode.getMessage();
    }

    /**
     * 根据错误信息和异常原因构造异常
     *
     * @param message 错误信息
     * @param cause   异常原因
     */
    public YshopException(String message, Throwable cause) {
        super(message, cause);
    }

    /**
     * 根据异常原因构造异常
     *
     * @param cause 异常原因
     */
    public YshopException(Throwable cause) {
        super(cause);
    }

}
